package com.example.singleton;

import java.io.Serializable;

/**
 * 序列化和反序列化时同样保证单例
 */
public class Cat implements Serializable {
    /**
     * 静态属性不会被序列化
     * 如果不是静态属性，需要用 transient 修饰
     */
    private static final Cat INSTANCE = new Cat();

    private Cat() {}

    public static Cat getInstance() {
        return INSTANCE;
    }

    /**
     * 通过声明该方法，JDK 反序列化时将是浅拷贝，而不是深拷贝，反序列化得到的对象与之前一致
     * 说白了，就是通过反射调用 readResolve 方法拿到了对象指针并拷贝
     * @return
     */
    private Object readResolve() {
        return INSTANCE;
    }
}
